/**
 * @author yzhou2
 */
if (!Util) {
    var Util = {};
}
Util.DateRangeField=function(container,config,callback){
	this.container=container||$(document.body);
	this.config={
		editable:false,
		splitLabel:' - ',
		fromDate:'2011-07-05',
		toDate:'2011-07-05',
		format:'yyyy-MM-dd',
		showGoBtn:true,
		autoCallback:false
	};
	if(config){
		$.extend(this.config,config);
	}
	this.callback=callback||{};
	this.el=null;
	this.$dateInput=null;
	this.$dateSearch=null;
	this.html='<span class="qs-dateField"><input class="qs-ui-ipt" type="text"'+(this.config.editable?'readOnly=true':'')+'/>'+this.config.splitLabel+'<input class="qs-ui-ipt" type="text"'+(this.config.editable?'readOnly=true':'')+'/>'+(this.config.showGoBtn?'<a class="qs-ui-btn go" href="javascript:void(0)">GO</a>':'')+'</span>';
    this.init();
};
Util.DateRangeField.prototype={
	init:function(){
		this.el=$(this.html).appendTo(this.container);
		this.$dateInput=this.el.find('input');
		this.$dateSearch=this.el.find('.go');
		this._createDateRange(this.$dateInput);
	},
	setDateValue:function(fromDate,toDate){
		this.$dateInput.eq(0).val(fromDate).data('date',QS_DateFormat.convertDate(fromDate));
        this.$dateInput.eq(1).val(toDate).data('date',QS_DateFormat.convertDate(toDate));
	},	
	_createDateRange:function(dateInput){
        var self=this;
        dateInput.eq(0).val(this.config.fromDate).data('date',QS_DateFormat.convertDate(this.config.fromDate));
        dateInput.eq(1).val(this.config.toDate).data('date',QS_DateFormat.convertDate(this.config.toDate));
        if(typeof QSCAL=='undefined'){
            window.QSCAL = new Util.Calendar($('body'),{},{
                //direction:'top'
            });
        }
        QSCAL.register(dateInput[0],function(date){
            var sdt=dateInput.eq(0).data('date');
            var edt=dateInput.eq(1).data('date');
            if (date.getTime() > edt.getTime()) {
                dateInput.eq(0).data('date',edt);
                dateInput.eq(1).data('date',date).val(QS_DateFormat.formatDate(date));
            }else {
                dateInput.eq(0).data('date',date);
            }
            dateInput.eq(0).val(QS_DateFormat.formatDate(dateInput.eq(0).data('date')));  
            self._callback(dateInput);   
        });
        QSCAL.register(dateInput[1],function(date){
            var sdt=dateInput.eq(0).data('date');
            var edt=dateInput.eq(1).data('date');
            if(date.getTime()<sdt.getTime()){
                dateInput.eq(1).data('date',sdt);
                dateInput.eq(0).data('date',date).val(QS_DateFormat.formatDate(date));
            }
            else{
                dateInput.eq(1).data('date',date);
            }
            dateInput.eq(1).val(QS_DateFormat.formatDate(dateInput.eq(1).data('date'))); 
			self._callback(dateInput); 
        });
        dateInput.focus(function(e){
            if ($.browser.msie) {       // fixed the issue that hit backspace key will back the web page.
                document.body.focus();
            }
            QSCAL.show(e.target,$(e.target).data('date'));      

        });
		if(this.config.showGoBtn) {
			this.$dateSearch.bind('click.dateRangeField', function(e){
				var sdt = dateInput.eq(0).data('date');
				var edt = dateInput.eq(1).data('date');
				if (typeof self.callback.onDateChanged == 'function') {
					self.callback.onDateChanged(sdt, edt);
				}
			});
		}
    },
	_callback:function(dateInput){
        if(this.config.autoCallback){
          var sdt=dateInput.eq(0).data('date');
          var edt=dateInput.eq(1).data('date');
          if(typeof this.callback.onDateChanged=='function'){
              this.callback.onDateChanged(sdt,edt);
          }  
      }
	}
};
